﻿using Project.Model;
using System;
using System.Collections.Generic;
using System.Text;
using Tool.Model;

namespace Project.Logic
{
    /// <summary>
    /// 员工操作逻辑类接口
    /// </summary>
    public interface IEmployeeService
    {
        /// <summary>
        /// 获取员工列表信息
        /// </summary>
        /// <param name="Input"></param>
        /// <returns></returns>
        ResultJsonInfo<List<T_EmployeeEntity>> LoadEmployeeList(ParametersInfo<EmployeeInfoQueryRequest> Input);

        /// <summary>
        /// 获取员工列表信息【用于导出使用】
        /// </summary>
        /// <param name="Input"></param>
        /// <returns></returns>
        ResultJsonInfo<List<T_EmployeeEntity>> LoadEmployeeAllList(ParametersInfo<EmployeeInfoQueryRequest> Input);


        /// <summary>
        /// 上传员工图片
        /// </summary>
        /// <param name="webRootPath"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        ResultJsonInfo<string> UploadImage(string webRootPath, Dictionary<string, object> Input);

        /// <summary>
        /// 保存员工信息
        /// </summary>
        /// <param name="Input"></param>
        /// <returns></returns>
        ResultJsonInfo<int> Save(EmployeeOperateRequest inputInfo);

        /// <summary>
        /// 在职与离职操作
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        ResultJsonInfo<int> Forbidden(int id);

        /// <summary>
        /// 获取员工图片信息
        /// </summary>
        /// <returns></returns>
        ResultJsonInfo<T_EmployeeImgEntity> LoadEmployeeImg(string userNo);

        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="Ids"></param>
        /// <returns></returns>
        ResultJsonInfo<int> Remove(List<int> Ids);
       

        /// <summary>
        /// 审核操作
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        ResultJsonInfo<int> AuditInfo(EmployeeAuditRequest inputInfo);

        #region 考勤相关

        /// <summary>
        /// 获取考勤明细
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<Dictionary<string, object>>> LoadExamineList(ParametersInfo<ExamineQueryRequest> inputInfo);

        /// <summary>
        /// 获取考勤不分页明细
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<Dictionary<string, object>>> LoadExamineAllList(ParametersInfo<ExamineQueryRequest> inputInfo);

        /// <summary>
        /// 获取考勤月报
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<Dictionary<string, object>>> LoadExamineStatisticsList(ParametersInfo<ExamineStatisticsQueryRequest> inputInfo);

    
        /// <summary>
        /// 获所有取考勤月报
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<Dictionary<string, object>>> LoadExamineStatisticsAllList(ParametersInfo<ExamineStatisticsQueryRequest> inputInfo);

        /// <summary>
        /// 获取打卡记录分页列表
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<Dictionary<string, object>>> LoadMapAttendList(ParametersInfo<MapAttendQueryRequest> inputInfo);

        /// <summary>
        /// 更具日期和员工编号获取指定的考情信息
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<T_AttendanceEntity>> LoadDesignatedExamine(ParametersInfo<ExamineDesignatedQueryRequest> parametersInfo);


        /// <summary>
        /// 删除考情信息
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        ResultJsonInfo<int> RemoveAttendance(List<int> parameters);

        /// <summary>
        /// 修改具体考情信息
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        ResultJsonInfo<int> ModifyAttendance(AttendanceModifyRequest parameters);

        /// <summary>
        /// 考情 审核通过
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        ResultJsonInfo<int> AuditInfo(List<AttendanceAuditRequest> parameters);

        #endregion

        #region 员工工资

        /// <summary>
        /// 获取员工工资统计信息
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<SalaryInfoQueryResponse>> LoadEmployeeSalaryList(ParametersInfo<SalaryQueryRequest> inputInfo);

        /// <summary>
        /// 结算工资
        /// </summary>
        /// <param name="inputInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<int> Settlement(SalarySettlementRequest inputInfo);


        /// <summary>
        /// 获取员工工资单信息
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<T_SalaryCountEntity>> LoadEmployeeSalaryRecordList(ParametersInfo<SalaryRecordQueryRequest> inputInfo);

        /// <summary>
        /// 获取所有员工工资单信息
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<T_SalaryCountEntity>> LoadSalaryRecordAllList(ParametersInfo<SalaryRecordQueryRequest> inputInfo);

        /// <summary>
        /// 撤销工资单
        /// </summary>
        /// <param name="inputInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<int> CancelSalary(SalaryCancelRequest inputInfo);

        /// <summary>
        /// 员工工资发放列表
        /// </summary>
        /// <param name="inputInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<T_SalaryCountEntity>> LoadEmployeeSalaryPaymentList(ParametersInfo<SalaryPaymentQueryRequest> inputInfo);

        /// <summary>
        /// 员工工资发放所有信息列表
        /// </summary>
        /// <param name="parametersInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<List<T_SalaryCountEntity>> LoadEmployeeSalaryPaymentAllList(ParametersInfo<SalaryPaymentQueryRequest> parametersInfo);

        /// <summary>
        /// 修改补助
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        ResultJsonInfo<int> SaveSubsidy(SalarySubsidyRequest inputInfo);

        /// <summary>
        /// 工资发放
        /// </summary>
        /// <param name="inputInfo"></param>
        /// <returns></returns>
        ResultJsonInfo<int> PaymentSalary(List<int> inputInfo);

        /// <summary>
        /// 撤销工资发放
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        ResultJsonInfo<int> RevokeSalary(List<int> inputInfo);


        #endregion
    }
}
